perm filename CONS[P,JRA] blob
sn#608406 filedate 1981-08-25 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00005 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 constraints
C00003 00003
C00006 00004 Culler-Fried
C00012 00005 in lisp, need:
C00014 ENDMK
C⊗;
constraints
visicalc
thinglab
logo linked turtles
smalltalk examples
turtle geo
sophie+gls
culler
education
logo
smalltalk
lisp
books
summer school
refs.
mindstorms
world challenge
turtle geo
culler stuff
Useable Systems
The key to the wide-spread use of computing resources is the development
of effective user interfaces. A successful example of this phenomenon
is Visicalc. This micro-based software tool
*** describe it ***
Visicalc is an exceptionally simple application of a computing technique
called "constraints". We exhibit several examples of constraint
notions and show that there is a rich class of applications that are
potential products. We propose to exploit that initial market immediately while
developing general tools to assure the speedy implemenation of more
advanced applications as hardware becomes available.
Computing tools have a reputation for being formidable.
Cost
Size
Obscure communication
Mindless
No common sense
No sense of inconsistency
Irresponsible
--------------------------------------------
How to address these problems.
Cost
micro technology
Size
vlsi
Obscure communication
speech/natural language communication
graphics: visual presentation
flexible declarative languages
Irresponsible systems: the difficulty!
No common sense
deduction
No sense of inconsistency
sense of truth
--------------------------------------------
Constraints: The kernel notions
objects are interrelated: a change of one can affect change in another
examples:
visicalc
thinglab
gls circuit
dpl* design rules
turtles/physics
systems must be responsible: an inconsistency must be detectable
examples:
systems must be directable: an object must be retractable
examples:
what can be done now
visicalc+
sophie+gls
dpl
culler+
what can be expected
system building tools
constraint languages
expert systems
what is required now
machines
people
facilities
Culler-Fried
This is one of the first truly interactive graphics systems.
This system is based on the manipulation of finite function-segments.
The function segments are approximated by a finite number of points
in a user-specified range, and are represented as a vector of "ordinate" values.
For example, the function y=x [-1,1] is represented as sequence
of equally-spaced real numbers in the range [-1, 1], the density of which
is implementation dependent, but typically is several hundred samples.
One can build up such objects using primitive operations,
and function composition.
For example, in a typical Culler-Freid system one has the following
function keys:
id to construct the identity function y=x [-1,1]
* to invoke point-wise multiplication of functional components
2 to construct the constant function y=2.
↑ to invoke the exponentation function g(x)↑f(x)
Thus, the keystroke sequence: id*2↑2 will construct the parabolic
segment 2x↑2 over the range [-1,1] (2*id↑2 would work equally well).
One may view this results by pressing the "display" key. This key will
plot the computed values against another such vector. If that vector is the
identity vector, we will see the function y=2*x↑2
Of course, one may vary the vector which represents the "abcissa" values,
opening the possibility to plot parametric functions: y=sin(t) versus
x=cons(t) will give us a circular plot.
***example of nice parametric plot.
With these examples, we have the basic ingredients of the system:
data structures as finite vectors representing ordinates of functions,
operations to transform the components of the vectors, an operation to display
the results of a computation. These elements are reminiscent of
those found on a hand calculator. Indeed, the system can be used as such;
however its generality extends past this simple behavior. A Culler system
contains all of the components typically found in a computing system including
the ability to build and name new operations to be invoked later.
This added functionality allows us to define a sequence of keystrokes --a program--
and associate it with a specified key. Thus λ((v) v↑2) and sqr = λ((v) v↑2),
and the composition sqr(sqr) denotes λ((v) v↑4).
With this collection of operations, we have defined a machine that performs
simple arithmetic operations on functions. We can effectively extend the power
of this subset by including approximation to functions not explicitly
definable in "close form". For example, we might define a segment of the
sine function as:
sin(t) = x/6 + kkl****
Though interesting and non-trivial
applications result from this subset, such systems come into their own when
they are extended to include operations for differentiation and integration
of functions segments.
The heart of the calculus operations are two primitives --finite differences,
and running sums.
***example *****
Given these primitives, we have opened to door to real analysis, in
particular, the on-line interactive solution to differential and integral
equations.
-----
extensions:
1. many dimensions
graphing problems: hidden line elimination, and rotations
2. color
not problematic
3. symbolic capability --algebraic ops.
explore: simple lisp analysis to macsyma interaction
-----
applications
in lisp, need:
α and β
id
load
store
should have push and pop
display
read eval print => readch (maybe more keys)
eval
display α versus β
id*2↑2
id => load β to toplev
* => loop(*)
↑ => loop(*)
2 => load WS
loop(OP): readch ? rator => to toplev1
rand => get (in WS); OP it to β; go loop
toplev: readch
toplev1: ? rator => β empty? => error
o.w. => do it to β
rand => get (in WS); move to β; go toplev
need paren-parser
a OP b OP1 c as: (a OP b) OP1 c
versus a OP b OP1 c as: a OP (b OP1 c)
push a
push op
push b
tos
push op1
push c
tos
push a
push op
push b
push op1
push c
tos
tos